/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.actions.cambios;

import com.itextpdf.text.DocumentException;
import com.mapping.CambioComp;
import com.mapping.Componentes;
import com.mapping.Dispositivo;
import com.mapping.Empleado;
import com.mapping.ReporteCambio;
import com.mapping.Ticket;
import com.opensymphony.xwork2.ActionSupport;
import com.session.Session;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
import javax.persistence.Query;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.SessionAware;

/**
 *
 * @author Andres
 */
@Namespace(value = "/")
@Action(value = "altaCambioComponente", results = {@Result(name = "success", location = "/GestionCambios/rAltaCambioComponente.jsp")})
public class AltaCambioComponenteAction extends ActionSupport implements ServletRequestAware{
    private String idTicket;
    private String idDisp;
    private String idComponente;
    private String idComponenteCambio;
    private String rutaArchivo;
    public HttpServletRequest request;
     
    @Override
    public String execute(){
        Session s = (Session) request.getSession().getAttribute("Sesion");
        String consulta1 = "select IDTICKET, IDCOMPONENTE, IDCOMPONENTECAMBIO from cambio_comp "
                            + "where idTicket=?1 and idComponente=?2";
        String update = "update componentes set idDispActual=null where id=?1";
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("inventarios");
        EntityManager em = emf.createEntityManager();
        EntityTransaction tx = em.getTransaction();
        tx.begin();
            Dispositivo disp = (Dispositivo)em.getReference(Dispositivo.class, idDisp);
            Query query =  em.createNativeQuery(consulta1,CambioComp.class);
            query.setParameter(1,idTicket);
            query.setParameter(2,idComponente);
            CambioComp cc =  (CambioComp)query.getSingleResult();
            Componentes comp = em.getReference(Componentes.class,Integer.parseInt(idComponenteCambio));
            
            cc.setIdComponenteCambio(comp);
            query = em.createNativeQuery(update);
            query.setParameter(1, idComponente);
            query.executeUpdate();
            
            Componentes comp2 = em.getReference(Componentes.class, Integer.parseInt(idComponenteCambio));
            comp2.setIdDispActual(disp);
            
            Ticket t =  em.getReference(Ticket.class, idTicket);
            t.setEmpResolvio(em.getReference(Empleado.class, s.getEmpleado().getIdEmpleado()));
            t.setEstado("cerrado");
            
        em.flush();
        tx.commit();
        
        DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
        DateFormat dateFormat2 = new SimpleDateFormat("ddMMyyyy");
        Date date = new Date();
        String ruta = request.getSession().getServletContext().getRealPath("/")+"\\ReportesCambios";
        String fecha = dateFormat.format(date);
        String nombreArchivo = cc.getTicket().getIdTicket()+"_"+dateFormat2.format(date)+".pdf";
        rutaArchivo = "ReportesCambios/"+nombreArchivo;
        ReporteCambioPDF reporte = new ReporteCambioPDF(cc.getTicket(), disp, cc.getComponentes(), cc.getIdComponenteCambio(), 
                fecha, ruta, nombreArchivo);
        try {    
            reporte.generar();
        } catch (DocumentException | IOException de) {
            ruta = de.getMessage();
        }
        tx.begin();
        ReporteCambio rp = new ReporteCambio();
        rp.setIdTicket(cc.getTicket());
        rp.setArchivo(rutaArchivo);
        em.persist(rp);
        em.flush();
        tx.commit();
        em.close();
        
        return SUCCESS;
    }

    public void setIdTicket(String idTicket) {
        this.idTicket = idTicket;
    }

    public void setIdDisp(String idDisp) {
        this.idDisp = idDisp;
    }

    public void setIdComponente(String idComponente) {
        this.idComponente = idComponente;
    }

    public void setIdComponenteCambio(String idComponenteCambio) {
        this.idComponenteCambio = idComponenteCambio;
    }

    public String getRutaArchivo() {
        return rutaArchivo;
    }
    
    
    @Override
    public void setServletRequest(HttpServletRequest request) {
        this.request = request;  
    }
    
}
